home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / asm32.zip / E32.ZIP / STARTCW.ASM < prev    next >
Assembly Source File  |  1995-11-07  |  2KB  |  99 lines

  1. ; STARTCW.ASM for ASM32CW - Copyright (C) 1994, 1995 Douglas Herr
  2. ;  all rights reserved
  3.  
  4. include    model.inc
  5.  
  6. includelib    asm32cw
  7.  
  8. public    $zerosel, $pspsel, $xferseg
  9. public    zero_sel
  10. IFNDEF    NEARMODEL
  11. public    $aliassel
  12. public    alias_code_sel
  13. ENDIF
  14.  
  15. extrn    main32:near
  16.  
  17. include    dataseg.inc
  18.  
  19. get_info    dd get_system_data
  20. zero_sel    dw ?        ; 4G selector for linear address 0000:0000
  21. psp_sel        dw ?        ; 100h selector for PSP segment
  22. xfer_buffer    dd ?        ; size of transfer buffer (always < 64k)
  23. xfer_seg    dw ?        ; real-mode segment address of transfer buffer
  24. xfer_sel    dw ?        ; selector of transfer buffer
  25. xfer_offset    dd ?        ; offset of transfer buffer
  26. system_flags    dd ?        ; CW extender flags
  27. IFNDEF    NEARMODEL
  28. alias_code_sel    dw ?
  29. ENDIF
  30. @curseg    ends
  31.  
  32. include    codeseg.inc
  33.  
  34. start:
  35.     mov    ax,_NEAR
  36.     mov    ds,ax
  37.     mov    es,ax
  38.     mov    fs,ax
  39.     mov    gs,ax
  40.  
  41.     call    get_system_data        ; initialize ZERO_SEL, PSP_SEL, etc
  42.     call    main32            ; call your main program
  43.  
  44.     mov    ax,4C00h
  45.     int    21h
  46.  
  47.  
  48. ; get CW-ASM system data using CW API
  49.  
  50. $zerosel:
  51.     call    [get_info]
  52.     mov    ax,zero_sel
  53.     ret
  54.  
  55. $pspsel:
  56.     call    [get_info]
  57.     mov    ax,psp_sel
  58.     ret
  59.  
  60. IFNDEF    NEARMODEL
  61. $aliassel:
  62.     call    [get_info]
  63.     mov    ax,alias_code_sel
  64.     ret
  65. ENDIF
  66.  
  67. $xferseg:
  68.     call    [get_info]
  69.     mov    bx,xfer_seg    ; real-mode segment address of buffer
  70.     mov    eax,xfer_offset
  71.     mov    ecx,xfer_buffer    ; size of transfer buffer
  72.     ret
  73.  
  74. get_system_data:
  75.     pushad
  76.     push    es
  77.  
  78.     sys    info        ; API function to get CW extender data
  79.     mov    zero_sel,ax
  80.     mov    psp_sel,bx
  81.     mov    xfer_buffer,ecx
  82.     mov    xfer_seg,dx
  83.     mov    xfer_offset,esi
  84.     mov    xfer_sel,es
  85.     mov    system_flags,edi
  86. IFNDEF    NEARMODEL
  87.     mov    bx,cs
  88.     sys    AliasSel
  89.     mov    alias_code_sel,ax
  90. ENDIF
  91.     pop    es
  92.     popad
  93.     mov    get_info,offset @curseg:exit
  94. exit:
  95.     ret
  96.  
  97. @curseg    ends
  98.     end    start
  99.